Sqlplus连接Oracle出现中文乱码问题以及字符集的选择

您所在的位置:网站首页 cmd连接oracle数据库 乱码 Sqlplus连接Oracle出现中文乱码问题以及字符集的选择

Sqlplus连接Oracle出现中文乱码问题以及字符集的选择

2023-08-06 20:40| 来源: 网络整理| 查看: 265

        昨天在虚拟机里新装了个Ubuntu,然后今天使用sql/plus时就出现了中文乱码问题,百度一番,终于解决了吐舌头

乱码现象如图:

搞定后如图:

常用的字符集:

US7ASCII:只能存储美国人使用的字符,26个英文字母,数字,+-*/等等

ZHS16GBK:存储中国人常用的字符

UTF8:unicode字符集,存储全世界的字符,只是不全

AL32UTF8:unicode字符集,比UTF8大多了,unicode字符集使用它,全但性能较差

ALS16UTF16:国家字符集选择它

注意:如果只是中国人使用,ZHS16GBK就足够了,如果是全世界都使用,就使用AL32UTF8

字符集一共有三种:a.操作系统字符集

                                   b.Oracle数据库字符集

                                    c.软件字符集

      如果软件有字符集,就不会使用操作系统的字符集;如果没有字符集(比如SQL/PLUS就没有字符集),那么在输入和显示中文时就调用操作系统的字符集来进行编码。SQL/PLUS在输入中文以后,会调用操作系统的字符集将中文转化成编码,然后传递给Oracle数据库,Oracle数据库通过查看nls_language来获取操作系统使用的字符集,如果俩字符集是一致的,那么就会直接将编码存入Oracle数据库;如果不一致,Oracle数据库首先会用nls_lang所表明的字符集将编码转化成字符,然后用Oracle数据库自己的字符集将字符转化成编码存入数据库。总之,所有字符集的转化都是在Oracle端进行的,Oracle数据库在存储数据的时候一定是按照自己的字符集来存储的。

1. NLS_LANG 参数组成 NLS_LANG参数由以下部分组成: NLS_LANG=_.

NLS_LANG各部分含义如下: LANGUAGE指定: -Oracle消息使用的语言 -日期中月份和日显示 TERRITORY指定 -货币和数字格式 -地区和计算星期及日期的习惯 CHARACTERSET: -控制客户端应用程序使用的字符集 通常设置或者等于客户端(如Windows)代码页  或者对于unicode应用设置为UTF8

2查看 NLS_LANG 的方法

Windows使用:

echo %NLS_LANG%

Unix使用:

env|grep NLS_LANG

3. 查看数据库当前字符集参数设置 SELECT * FROM v$nls_parameters;

4. 查看数据库可用字符集参数设置 SELECT * FROM v$nls_valid_values;

5. 客户端 NLS_LANG 的设置方法 Windows: # 常用中文字符集 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK # 常用unicode字符集 set NLS_LANG=american_america.AL32UTF8

Unix: # 常用unicode字符集

export NLS_LANG=american_america.AL32UTF8

# 常用中文字符集

export NLS_LANG="Simplified Chinese_china".ZHS16GBK

可以编辑 bash_profile 文件进行永久设置

vi .bash_profile

NLS_LANG="Simplified Chinese_china".ZHS16GBK export NLS_LANG

# 使 bash_profile 设置生效

source .bash_profile

 6.出现乱码可能存在的原因:

存储错误的字符编码

存储正确的字符编码,但nls_lang设置错了

 7.解决方法:

       操作系统常用的字符集一共两种,一种是UTF8,还有一种就是中文。windows通过chcp命令来查询操作系统所使用的字符集,如果现实"活动代码页:936",就表示操作系统使用的字符集是中文,这时只要将nls_lang通过Set nls_lang=american_america.zhs16gbk命令设置成GBK即可,总之,NLS_LANG一定要设置成与操作系统字符集一致才不会出现中文乱码或者显示?的问题。

参考资料:

Oracle:sqlplus查询出的中文是乱码问题的解决

sqlplus连接oracle乱码

                               欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;

                                                                          



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3